package com.grape.session;

import com.grape.dto.OnlineUserChannelDTO;
import io.netty.channel.Channel;

import java.util.List;
import java.util.Optional;
import java.util.Set;

public interface IUserChannelStore {

    /**
     * 通过用户id获取通道
     * @param userId    用户id
     * @return          通道
     */
    Optional<Channel> findChannelByUserId(String userId);

    /**
     * 绑定用户id和通道
     * @param userId  用户id
     * @param channel 通道
     * @param token 令牌
     */
    void bindUserToChannel(String userId, Channel channel, String token);

    /**
     * 获取所有在线用户id
     * @return  用户id
     */
    Set<String> getOnlineUserIds();

    /**
     * 获取所有在线用户dto
     * @return  用户dto
     */
    List<OnlineUserChannelDTO> getOnlineUserChannelList();

    /**
     * 更新用户上次重置时间
     * @param data  消息数据
     * @param userId    用户id
     */
    void updateLastResetTimeByUserId(Object data, String userId);
}
